from django.db import models
from django.utils import timezone


# 如果引用模型不在当前文件中，外键名使用：应用名.模型名引用（app_name.modelName）

class FileInfoModel(models.Model):
    class Meta:
        db_table = "file_info"
        # 在django5内置的admin系统中模型显示的名称
        verbose_name = "文件信息"
        verbose_name_plural = "文件信息"

    # 主键一般用models.AutoField
    # verbose_name:admin系统中字段显示的名称
    file_id = models.AutoField(primary_key=True, auto_created=True, db_comment='文件id，主键', verbose_name='文件id')
    file_name = models.CharField(max_length=255, null=False, db_comment='文件名称', verbose_name='文件名称')
    file_url = models.CharField(max_length=255, null=False, db_comment='文件路径', verbose_name='文件路径')
    file_type = models.CharField(max_length=255, null=False, db_comment='文件类型', verbose_name='文件类型')

    def __str__(self):
        return self.file_name


class BookTypeModel(models.Model):
    class Meta:
        db_table = "book_type"
        ordering = ['-type_id']
        verbose_name = "书籍类型模型"
        verbose_name_plural = "书籍类型模型"

    type_id = models.AutoField(primary_key=True, auto_created=True, db_comment='书籍类型id，主键', verbose_name='书籍类型id')
    type_code = models.CharField(max_length=255, null=False, db_comment='类型编码', verbose_name='类型编码')
    type_name = models.CharField(max_length=255, null=False, db_comment='类型名称', verbose_name='类型名称')

    def __str__(self):
        return self.type_name


class BookInfoModel(models.Model):
    class Meta:
        db_table = "book_info"
        verbose_name = "书籍信息模型"
        verbose_name_plural = "书籍信息模型"

    id = models.AutoField(primary_key=True, auto_created=True, db_comment='书籍id，主键')
    book_no = models.CharField(max_length=255, null=False, db_comment='书籍编码', default='', verbose_name='书籍编号')
    book_name = models.CharField(max_length=255, null=False, verbose_name='书籍名称')
    book_author = models.CharField(max_length=255, null=False, verbose_name='书籍作者')
    # 不要设置 auto_now_add=True，否则在admin内置系统中编辑时候不显示（可在赋值时设置或save时设置默认值）
    create_date = models.DateTimeField(verbose_name='创建时间')
    create_user = models.CharField(max_length=255, null=False, verbose_name='创建人工号')
    update_date = models.DateTimeField(verbose_name='修改时间')
    update_user = models.CharField(max_length=255, null=False, verbose_name='修改人工号')
    version = models.IntegerField(null=False, default=0, verbose_name='版本号')
    # to: 关联的模型名称 class名  to_field：file_info模型中的主键
    # db_column:当前book_info模型中的字段名，如果不指定django会自动生成,规则：当前名称 + _id后缀（即：name_id）
    # 如果字段名是file_id,没指定db_column,则当前模型中外键字段为file_id_id
    # file_id：表示的是整个file对象
    file_id = models.ForeignKey(to=FileInfoModel, to_field='file_id', db_column='file_id', on_delete=models.CASCADE,
                                db_comment='书籍封面图片地址id', verbose_name='书籍封面文件')
    type_info = models.ForeignKey(to=BookTypeModel, to_field='type_id', db_column='type_id', on_delete=models.CASCADE,
                                  db_comment='书籍类型id', verbose_name='书籍类型')

    def save(self, *args, **kwargs):
        if not self.create_date:
            self.create_date = timezone.now()
        if not self.update_date:
            self.update_date = timezone.now()
        super().save(*args, **kwargs)

    def __str__(self):
        return self.book_no
